package com.mo.tools.verification;

import java.util.Collection;
import java.util.Map;

/**
 * @name: Assert
 * @description: 空值验证
 * @author: Yang Xingfu
 * @date: 2019-10-28 15:15
 **/
public abstract class Assert extends Exception {

    private static final String FAILED = "FAILED";

    public Assert() {
    }

//    /**
//     * 参数为空校验
//     *
//     * @param t       参数
//     * @param message 异常信息
//     * @param <T>     泛型
//     * @throws ServiceException 参数为空抛出异常
//     */
//    public static <T> void isNull(T t, String message) throws ServiceException {
//        if (t == null) {
//            throw new ServiceException(FAILED, message);
//        }
//    }
//
//    /**
//     * 参数不为空校验
//     *
//     * @param t       参数
//     * @param message 异常信息
//     * @param <T>     泛型
//     * @throws ServiceException 参数不为空抛出异常
//     */
//    public static <T> void notNull(T t, String message) throws ServiceException {
//        if (t != null) {
//            throw new ServiceException(FAILED, message);
//        }
//    }
//
//
//    /**
//     * 参数是empty校验
//     *
//     * @param t       参数
//     * @param message 异常信息
//     * @param <T>     泛型
//     * @throws ServiceException 参数为empty抛出异常
//     */
//    public static <T> void isEmpty(T t, String message) throws ServiceException {
//        //  t == null
//        if (t == null) {
//            throw new ServiceException(FAILED, message);
//        }
//
//        //  t == ""
//        if (t instanceof String) {
//            String s = (String) t;
//            if (s.length() == 0) {
//                throw new ServiceException(FAILED, message);
//            }
//        }
//
//        //  t为Collection时, t.size() == 0
//        if (t instanceof Collection) {
//            Collection c = (Collection) t;
//            if (c.size() == 0) {
//                throw new ServiceException(FAILED, message);
//            }
//        }
//
//        // t为map时, map.size() == 0
//        if (t instanceof Map) {
//            Map map = (Map) t;
//            if (map.size() == 0) {
//                throw new ServiceException(FAILED, message);
//            }
//        }
//    }
//
//    /**
//     * 参数是empty校验
//     *
//     * @param t       参数
//     * @param message 异常信息
//     * @param <T>     泛型
//     * @throws ServiceException 参数不为empty抛出异常
//     */
//    public static <T> void notEmpty(T t, String message) throws ServiceException {
//        //  t != null
//        if (t == null) {
//            throw new ServiceException(FAILED, message);
//        }
//
//        //  t != ""
//        if (t instanceof String) {
//            String s = (String) t;
//            if (s.length() > 0) {
//                throw new ServiceException(FAILED, message);
//            }
//        }
//
//        //  t为Collection时size() > 0
//        if (t instanceof Collection) {
//            Collection c = (Collection) t;
//            if (c.size() > 0) {
//                throw new ServiceException(FAILED, message);
//            }
//        }
//
//        //  t为Map时size() > 0
//        if (t instanceof Map) {
//            Map map = (Map) t;
//            if (map.size() > 0) {
//                throw new ServiceException(FAILED, message);
//            }
//        }
//    }
//
//    /**
//     * 参数为false校验
//     *
//     * @param t       参数
//     * @param message 异常信息
//     * @param <T>     泛型
//     * @throws ServiceException 参数为true抛出异常
//     */
//    public static <T> void isTrue(T t, String message) throws ServiceException {
//        if (t instanceof Boolean && (Boolean) t == true) {
//            throw new ServiceException(FAILED, message);
//        }
//    }
//
//    /**
//     * 参数为true校验
//     *
//     * @param t       参数
//     * @param message 异常信息
//     * @param <T>     泛型
//     * @throws ServiceException 参数为false抛出异常
//     */
//    public static <T> void isFalse(T t, String message) throws ServiceException {
//        if (t instanceof Boolean && (Boolean) t == false) {
//            throw new ServiceException(FAILED, message);
//        }
//    }


    /**
     * 参数为空校验
     *
     * @param t   参数
     * @param <T> 泛型
     * @return true or false
     */
    public static <T> boolean isNull(T t) {
        return t == null ? true : false;
    }

    /**
     * 参数不为空校验
     *
     * @param t   参数
     * @param <T> 泛型
     * @return true or false
     */
    public static <T> boolean notNull(T t) {
        return t != null ? true : false;
    }

    /**
     * 参数为empty校验
     *
     * @param t   参数
     * @param <T> 泛型
     * @return true or false
     */
    public static <T> boolean isEmpty(T t) {
        //  t == null
        if (t == null) {
            return true;
        }

        //  t == ""
        if (t instanceof String) {
            String s = (String) t;
            if (s.length() == 0) {
                return true;
            }
        }

        //  t为Collection时, t.size() == 0
        if (t instanceof Collection) {
            Collection c = (Collection) t;
            if (c.size() == 0) {
                return true;
            }
        }

        // t为map时, map.size() == 0
        if (t instanceof Map) {
            Map map = (Map) t;
            if (map.size() == 0) {
                return true;
            }
        }

        return false;
    }

    /**
     * 参数不为empty校验
     * @param t 参数
     * @param <T> 泛型
     * @return true or false
     */
    public static <T> boolean notEmpty(T t) {
        //  t != null
        if (t == null) {
            return false;
        }

        //  t != ""
        if (t instanceof String) {
            String s = (String) t;
            if (s.length() > 0) {
                return true;
            }
        }

        //  t为Collection时size() > 0
        if (t instanceof Collection) {
            Collection c = (Collection) t;
            if (c.size() > 0) {
                return true;
            }
        }

        //  t为Map时size() > 0
        if (t instanceof Map) {
            Map map = (Map) t;
            if (map.size() > 0) {
                return true;
            }
        }

        return false;
    }

    /**
     * 参数为true校验
     * @param t 参数
     * @param <T> 泛型
     * @return true or false
     */
    public static <T> boolean isTrue(T t) {
        if (!(t instanceof Boolean)) {
            return false;
        }
        return (Boolean) t == true ? true : false;
    }

    /**
     * 参数为false校验
     * @param t 参数
     * @param <T> 泛型
     * @return true or false
     */
    public static  <T> boolean isFalse (T t) {
        if (!(t instanceof Boolean)) {
            return false;
        }
        return (Boolean) t == false ? true : false;
    }

    public static void main(String[] args) {

    }

}
